/*
* ============================================================================
* 功能描述 ：串口命令层
* 作者       ：ggls
* 创建日期 ：2024.04.10
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/

#include "main.h"

static uart_buf_s uart_buf;
void _uart_data_handle(void)
{
	char  th;
	char  ch;
	
	if(uart_buf.recv_buf[0] == 0x55)
	{
		if(uart_buf.recv_buf[1] == 0xaa)
		{
			if(uart_buf.recv_len >= 7)
			{
				th = uart_buf.recv_buf[6]*256+uart_buf.recv_buf[7];	// 计算传输命令字节数，判断校验位，数据长度是否足够
				uart_buf.cmd_len = th+9;
			
				if(uart_buf.recv_len == uart_buf.cmd_len)
				{
				
					ch = checksum(uart_buf.recv_buf, uart_buf.recv_len -1);					// 校验数据
					if(ch == uart_buf.recv_buf[uart_buf.recv_len -1])
					{
						int i;
						for(i = 0; i < uart_buf.recv_len; i++)
						{
							uart_buf.cmd_buf[i] = uart_buf.recv_buf[i];
						}
						uart_buf.recv_hand_flag = true;
						uart_buf.recv_len = 0;
					}
					else
					{
						uart_buf.recv_len = 0;
					}
				}
			}
			
		}
	}
	else if (uart_buf.recv_buf[0] != 0x55)
		uart_buf.recv_len = 0;
}

void hly_product_handle(void)
{
	char  th;
	char  ch;
	if(uart_buf.recv_buf[0] == 0xEF)
	{
		if(uart_buf.recv_buf[1] == 0x10)
		{
			if(uart_buf.recv_len > 3)
			{
				th = uart_buf.recv_buf[3];	// 计算传输命令字节数，判断校验位，数据长度是否足够
				uart_buf.cmd_len = th+5;
			
			
				if(uart_buf.recv_len == uart_buf.cmd_len)
				{
				
					ch = checksum(uart_buf.recv_buf, uart_buf.recv_len -1);					// 校验数据
					if(ch == uart_buf.recv_buf[uart_buf.recv_len -1])
					{
						int i;
						for(i = 0; i < uart_buf.recv_len; i++)
						{
							uart_buf.cmd_buf[i] = uart_buf.recv_buf[i];
						}
						uart_buf.recv_hand_flag = true;
						uart_buf.recv_len = 0;
					}
					else
					{
						uart_buf.recv_len = 0;
					}
				}
			}
			
		}
	}
	else if (uart_buf.recv_buf[0] != 0xEF)
		uart_buf.recv_len = 0;
}



/* uart0中断处理函数 */
void Uart0_Interrupt_Handle(void)
{
#if 1
//	if(UART_GetSendIntFlag(UART0))
//	{
	//	TL0 = 0;
//		UART_ClearSendIntFlag(UART0);	
//	}
	if(UART_GetReceiveIntFlag(UART0))
	{
		uart_buf.recv_buf[uart_buf.recv_len] = UART_GetBuff(UART0);		
		uart_buf.recv_len++;
		UART_ClearReceiveIntFlag(UART0);
		if(product == 0)
		{
			_uart_data_handle();
			
		}
		else if(product == 1)
		{
			hly_product_handle();
		}
	}
#else
	if(UART_GetSendIntFlag(UART0) == 0)
	{
		
		UART_ClearSendIntFlag(UART0);	
	}
	if(UART_GetReceiveIntFlag(UART0))
	{
//		UART_SendBuff(UART0,UART_GetBuff(UART0));
		UART_ClearReceiveIntFlag(UART0);	
	}	

#endif
}



void Zigbee_Cmd_handle(void)
{
	if(uart_buf.recv_hand_flag == true)
	{
		
		uart_buf.recv_hand_flag = false;
		switch(uart_buf.cmd_buf[4])
		{
			case DEVICE_MANAGE:
				Zigbee_Device_Manage(uart_buf.cmd_buf, uart_buf.cmd_len);
				break;
			case NETWORK_MANAGE:
				Zigbee_Network_Manage(uart_buf.cmd_buf, uart_buf.cmd_len);
				break;
			case SERIAL_CONFIG_MANAGE:

				break;
			case OTA_MANAGE:

				break;
			case PRODUCT_MANAGE:

				break;
			default:
				break;

		}
	}

}

void Hly_Product_Cmd_handle(void)
{

	if(uart_buf.recv_hand_flag == true)
	{
		
		uart_buf.recv_hand_flag = false;
		switch(uart_buf.cmd_buf[2])
		{
			case test_pid:
				Hly_porduct_pid();

				break;
			case test_lcd:
				Hly_porduct_lcd();

				break;
			case test_key:
				Hly_porduct_key();

				break;
			case test_vol:
				hly_Obtain_voltage();
				Hly_porduct_vol();

				break;
			case test_temp:
				app_Temp_Hum_cj();
				Hly_porduct_temp();

				break;
			case test_humi:
				app_Temp_Hum_cj();
				Hly_porduct_humi();

				break;
			case test_signal:
				Hly_porduct_signal();

				break;
			default:
				break;

		}
	}

}

